package com.csp.mingyue.common.satoken.utils;

import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.context.model.SaStorage;
import cn.dev33.satoken.stp.StpUtil;
import com.csp.mingyue.system.api.vo.LoginUser;

/**
 * 登录鉴权助手
 *
 * @author Strive
 * @date 2023/7/24 10:00
 */
public class LoginHelper {

	public static final String LOGIN_USER_KEY = "loginUser";

	public static final String USER_KEY = "userId";

	/**
	 * 登录系统
	 * @param userInfo 登录用户信息
	 */
	public static void login(LoginUser userInfo) {
		// 请求作用域：存储的数据只在一次请求内有效，请求结束后数据自动清除。
		SaStorage storage = SaHolder.getStorage();
		storage.set(LOGIN_USER_KEY, userInfo);
		storage.set(USER_KEY, userInfo.getUserId());

		// 第1步，先登录上
		StpUtil.login(userInfo.getUserId());
		// 第3步，缓存用户信息
		StpUtil.getTokenSession().set(LOGIN_USER_KEY, userInfo);
	}

	/**
	 * 获取用户(多级缓存)
	 */
	public static LoginUser getLoginUser() {
		LoginUser loginUser = (LoginUser) SaHolder.getStorage().get(LOGIN_USER_KEY);
		if (loginUser != null) {
			return loginUser;
		}
		loginUser = (LoginUser) StpUtil.getTokenSession().get(LOGIN_USER_KEY);
		SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser);
		return loginUser;
	}

}
